home *** CD-ROM | disk | FTP | other *** search
/ Amiga Games Extra 1996 September / Amiga Games Extra CD-ROM 9-1996.iso / userbox / publicdomain / vim-4.2 / src / vim.h < prev    next >
C/C++ Source or Header  |  1996-06-17  |  15KB  |  537 lines

  1. /* vi:set ts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved        by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  */
  8.  
  9. /* ============ the header file puzzle (ca. 50-100 pieces) ========= */
  10.  
  11. #ifdef HAVE_CONFIG_H    /* GNU autoconf (or something else) was here */
  12. # include "config.h"
  13. #endif
  14.  
  15. #ifdef __EMX__            /* hand-edited config.h for OS/2 with EMX */
  16. # include "conf_os2.h"
  17. #endif
  18.  
  19. /*
  20.  * This is a bit of a wishlist.  Currently we only have the Motif and Athena
  21.  * GUI.
  22.  */
  23. #if defined(USE_GUI_MOTIF) \
  24.     || defined(USE_GUI_ATHENA) \
  25.     || defined(USE_GUI_MAC) \
  26.     || defined(USE_GUI_WINDOWS31) \
  27.     || defined(USE_GUI_WIN32) \
  28.     || defined(USE_GUI_OS2)
  29. # ifndef USE_GUI
  30. #  define USE_GUI
  31. # endif
  32. #endif
  33.  
  34. #include "feature.h"    /* #defines for optionals and features */
  35.  
  36. /*
  37.  * Find out if function definitions should include argument types
  38.  */
  39. #ifdef AZTEC_C
  40. # include <functions.h>
  41. # define __ARGS(x)    x
  42. # define __PARMS(x)    x
  43. #endif
  44.  
  45. #ifdef SASC
  46. # include <clib/exec_protos.h>
  47. # define __ARGS(x)    x
  48. # define __PARMS(x)    x
  49. #endif
  50.  
  51. #ifdef _DCC
  52. # include <clib/exec_protos.h>
  53. # define __ARGS(x)    x
  54. # define __PARMS(x)    x
  55. #endif
  56.  
  57. #ifdef __TURBOC__
  58. # define __ARGS(x) x
  59. #endif
  60.  
  61. #if defined(UNIX) || defined(__EMX__)
  62. # include "unix.h"        /* bring lots of system header files */
  63. #endif
  64.  
  65. #ifdef VMS
  66. # include "vms.h"
  67. #endif
  68.  
  69. #ifndef __ARGS
  70. # if defined(__STDC__) || defined(__GNUC__) || defined(WIN32)
  71. #  define __ARGS(x) x
  72. # else
  73. #  define __ARGS(x) ()
  74. # endif
  75. #endif
  76.  
  77. /* __ARGS and __PARMS are the same thing. */
  78. #ifndef __PARMS
  79. # define __PARMS(x) __ARGS(x)
  80. #endif
  81.  
  82. #ifdef UNIX
  83. # include "osdef.h"        /* bring missing declarations in */
  84. #endif
  85.  
  86. #ifdef __EMX__
  87. # define    getcwd    _getcwd2
  88. # define    chdir    _chdir2
  89. # undef        CHECK_INODE
  90. #endif
  91.  
  92. #ifdef AMIGA
  93. # include "amiga.h"
  94. #endif
  95.  
  96. #ifdef ARCHIE
  97. # include "archie.h"
  98. #endif
  99.  
  100. #ifdef MSDOS
  101. # include "msdos.h"
  102. #endif
  103.  
  104. #ifdef WIN32
  105. # include "win32.h"
  106. #endif
  107.  
  108. #ifdef MINT
  109. # include "mint.h"
  110. #endif
  111.  
  112. /*
  113.  * maximum length of a file name and a path    (for non-unix systems)
  114.  */
  115. #ifndef MAXNAMLEN
  116. # define MAXNAMLEN 31
  117. #endif
  118.  
  119. #ifndef MAXPATHL
  120. # define MAXPATHL    128            /* not too long to put name on stack */
  121. #endif
  122.  
  123. /*
  124.  * Shorthand for unsigned variables. Many systems, but not all, have u_char
  125.  * already defined, so we use char_u to avoid trouble.
  126.  */
  127. typedef unsigned char    char_u;
  128. typedef unsigned short    short_u;
  129. typedef unsigned int    int_u;
  130. typedef unsigned long    long_u;
  131.  
  132. #ifndef UNIX                /* For Unix this is included in unix.h */
  133. #include <stdio.h>
  134. #include <ctype.h>
  135. #endif
  136.  
  137. #if defined(HAVE_STRING_H)
  138. # include <string.h>
  139. #else
  140. # ifdef HAVE_STRINGS_H
  141. #  include <strings.h>
  142. # endif
  143. #endif
  144.  
  145. #include "ascii.h"
  146. #include "keymap.h"
  147. #include "term.h"
  148. #include "macros.h"
  149.  
  150. #ifdef LATTICE
  151. # include <sys/types.h>
  152. # include <sys/stat.h>
  153. #endif
  154. #ifdef _DCC
  155. # include <sys/stat.h>
  156. #endif
  157. #if defined MSDOS  ||  defined WIN32
  158. # include <sys\stat.h>
  159. #endif
  160.  
  161. /* allow other (non-unix) systems to configure themselves now */
  162. #ifndef UNIX
  163. # ifdef HAVE_STAT_H
  164. #  include <stat.h>
  165. # endif
  166. # ifdef HAVE_STDLIB_H
  167. #  include <stdlib.h>
  168. # endif
  169. #endif /* NON-UNIX */
  170.  
  171. /* ================ end of the header file puzzle =============== */
  172.  
  173. /*
  174.  * flags for updateScreen()
  175.  * The higher the value, the higher the priority
  176.  */
  177. #define VALID                    10    /* buffer not changed */
  178. #define INVERTED                20    /* redisplay inverted part */
  179. #define VALID_TO_CURSCHAR        30    /* buffer at/below cursor changed */
  180. #define NOT_VALID                40    /* buffer changed */
  181. #define CURSUPD                    50    /* buffer changed, update cursor first */
  182. #define CLEAR                    60    /* screen messed up, clear it */
  183.  
  184. /*
  185.  * Attributes for NextScreen.
  186.  */
  187. #define CHAR_NORMAL        0
  188. #define CHAR_INVERT        1
  189. #define CHAR_UNDERL        2
  190. #define CHAR_BOLD        3
  191. #define CHAR_STDOUT        4
  192. #define CHAR_ITALIC        5
  193.  
  194. /*
  195.  * values for State
  196.  *
  197.  * The lowest four bits are used to distinguish normal/visual/cmdline/
  198.  * insert+replace mode. This is used for mapping. If none of these bits are
  199.  * set, no mapping is done.
  200.  * The upper four bits are used to distinguish between other states.
  201.  */
  202. #define NORMAL                    0x01
  203. #define VISUAL                    0x02
  204. #define CMDLINE                 0x04
  205. #define INSERT                    0x08
  206. #define NORMAL_BUSY                0x11    /* busy interpreting a command */
  207. #define REPLACE                 0x28    /* replace mode */
  208. #define HITRETURN                0x61    /* waiting for a return */
  209. #define ASKMORE                    0x70    /* Asking if you want --more-- */
  210. #define SETWSIZE                0x80    /* window size has changed */
  211. #define ABBREV                    0x90    /* abbreviation instead of mapping */
  212. #define EXTERNCMD                0xa0    /* executing an external command */
  213.  
  214. /* directions */
  215. #define FORWARD                 1
  216. #define BACKWARD                (-1)
  217. #define BOTH_DIRECTIONS            2
  218.  
  219. /* return values for functions */
  220. #define OK                        1
  221. #define FAIL                    0
  222.  
  223. /*
  224.  * values for command line completion
  225.  */
  226. #define CONTEXT_UNKNOWN            (-2)
  227. #define EXPAND_UNSUCCESSFUL        (-1)
  228. #define EXPAND_NOTHING            0
  229. #define EXPAND_COMMANDS            1
  230. #define EXPAND_FILES            2
  231. #define EXPAND_DIRECTORIES        3
  232. #define EXPAND_SETTINGS            4
  233. #define EXPAND_BOOL_SETTINGS    5
  234. #define EXPAND_TAGS                6
  235. #define EXPAND_OLD_SETTING        7
  236. #define EXPAND_HELP                8
  237. #define EXPAND_BUFFERS            9
  238. #define EXPAND_EVENTS            10
  239. #define EXPAND_MENUS            11
  240.  
  241. /* Values for nextwild() and ExpandOne().  See ExpandOne() for meaning. */
  242. #define WILD_FREE                1
  243. #define WILD_EXPAND_FREE        2
  244. #define WILD_EXPAND_KEEP        3
  245. #define WILD_NEXT                4
  246. #define WILD_PREV                5
  247. #define WILD_ALL                6
  248. #define WILD_LONGEST            7
  249.  
  250. #define WILD_LIST_NOTFOUND        1
  251. #define WILD_HOME_REPLACE        2
  252.  
  253. /* Values for the find_pattern_in_path() function args 'type' and 'action': */
  254. #define FIND_ANY        1
  255. #define FIND_DEFINE        2
  256. #define CHECK_PATH        3
  257.  
  258. #define ACTION_SHOW        1
  259. #define ACTION_GOTO        2
  260. #define ACTION_SPLIT    3
  261. #define ACTION_SHOW_ALL    4
  262. #ifdef INSERT_EXPAND
  263. # define ACTION_EXPAND    5
  264. #endif
  265.  
  266. /* Values for 'options' argument in do_search() and searchit() */
  267. #define SEARCH_REV      0x01    /* go in reverse of previous dir. */
  268. #define SEARCH_ECHO      0x02    /* echo the search command and handle options */
  269. #define SEARCH_MSG      0x0c    /* give messages (yes, it's not 0x04) */
  270. #define SEARCH_NFMSG  0x08    /* give all messages except not found */
  271. #define SEARCH_OPT      0x10    /* interpret optional flags */
  272. #define SEARCH_HIS      0x20    /* put search pattern in history */
  273. #define SEARCH_END      0x40    /* put cursor at end of match */
  274. #define SEARCH_NOOF      0x80    /* don't add offset to position */
  275. #define SEARCH_START 0x100    /* start search without col offset */
  276. #define SEARCH_MARK  0x200    /* set previous context mark */
  277. #define SEARCH_KEEP  0x400    /* keep previous search pattern */
  278.  
  279. /* Values for find_ident_under_cursor() */
  280. #define FIND_IDENT    1        /* find identifier (word) */
  281. #define FIND_STRING    2        /* find any string (WORD) */
  282.  
  283. /* Values for get_file_name_in_path() */
  284. #define FNAME_MESS    1        /* give error message */
  285. #define FNAME_EXP    2        /* expand to path */
  286. #define FNAME_HYP    4        /* check for hypertext link */
  287.  
  288. /* Values for buflist_getfile() */
  289. #define GETF_SETMARK    0x01    /* set pcmark before jumping */
  290. #define GETF_ALT        0x02    /* jumping to alternate file (not buf num) */
  291.  
  292. /* Values for in_indentkeys() */
  293. #define KEY_OPEN_FORW    0x101
  294. #define KEY_OPEN_BACK    0x102
  295.  
  296. /* Values for call_shell() second argument */
  297. #define SHELL_FILTER        1        /* filtering text */
  298. #define SHELL_EXPAND        2        /* expanding wildcards */
  299. #define SHELL_COOKED        4        /* set term to cooked mode */
  300.  
  301. /* Values for change_indent() */
  302. #define INDENT_SET            1        /* set indent */
  303. #define INDENT_INC            2        /* increase indent */
  304. #define INDENT_DEC            3        /* decrease indent */
  305.  
  306. /* Values for flags argument for findmatchlimit() */
  307. #define FM_BACKWARD            0x01    /* search backwards */
  308. #define FM_FORWARD            0x02    /* search forwards */
  309. #define FM_BLOCKSTOP        0x04    /* stop at start/end of block */
  310. #define FM_SKIPCOMM            0x08    /* skip comments */
  311.  
  312. /* Values for action argument for do_buffer() */
  313. #define DOBUF_GOTO        0        /* go to specified buffer */
  314. #define DOBUF_SPLIT        1        /* split window and go to specified buffer */
  315. #define DOBUF_UNLOAD    2        /* unload specified buffer(s) */
  316. #define DOBUF_DEL        3        /* delete specified buffer(s) */
  317.  
  318. /* Values for start argument for do_buffer() */
  319. #define DOBUF_CURRENT    0        /* "count" buffer from current buffer */
  320. #define DOBUF_FIRST        1        /* "count" buffer from first buffer */
  321. #define DOBUF_LAST        2        /* "count" buffer from last buffer */
  322. #define DOBUF_MOD        3        /* "count" mod. buffer from current buffer */
  323.  
  324. /* Values for sub_cmd and which_pat argument for myregcomp() */
  325. /* Also used for which_pat argument for searchit() */
  326. #define RE_SEARCH    0            /* save/use pat in/from search_pattern */
  327. #define RE_SUBST    1            /* save/use pat in/from subst_pattern */
  328. #define RE_BOTH        2            /* save pat in both patterns */
  329. #define RE_LAST        2            /* use last used pattern if "pat" is NULL */
  330.  
  331. /* Return values for fullpathcmp() */
  332. #define FPC_SAME   1            /* both exist and are the same file. */
  333. #define FPC_DIFF   2            /* both exist and are different files. */
  334. #define FPC_NOTX   3            /* both don't exist. */
  335. #define FPC_DIFFX  4            /* one of them doesn't exist. */
  336.  
  337. /*
  338.  * Events for autocommands.
  339.  */
  340. enum auto_events
  341. {
  342.     EVENT_BUFENTER = 0,        /* after entering a buffer */
  343.     EVENT_BUFLEAVE,            /* before leaving a buffer */
  344.     EVENT_BUFNEWFILE,        /* when creating a buffer for a new file */
  345.     EVENT_BUFREADPOST,        /* after reading a buffer */
  346.     EVENT_BUFREADPRE,        /* before reading a buffer */
  347.     EVENT_BUFWRITEPOST,        /* after writing a buffer */
  348.     EVENT_BUFWRITEPRE,        /* before writing a buffer */
  349.     EVENT_FILEAPPENDPOST,    /* after appending to a file */
  350.     EVENT_FILEAPPENDPRE,    /* before appending to a file */
  351.     EVENT_FILEREADPOST,        /* after reading a file */
  352.     EVENT_FILEREADPRE,        /* before reading a file */
  353.     EVENT_FILEWRITEPOST,    /* after writing a file */
  354.     EVENT_FILEWRITEPRE,        /* before writing a file */
  355.     EVENT_FILTERREADPOST,    /* after reading from a filter */
  356.     EVENT_FILTERREADPRE,    /* before reading from a filter */
  357.     EVENT_FILTERWRITEPOST,    /* after writing to a filter */
  358.     EVENT_FILTERWRITEPRE,    /* before writing to a filter */
  359.     EVENT_VIMLEAVE,            /* before exiting Vim */
  360.     EVENT_WINENTER,            /* after entering a window */
  361.     EVENT_WINLEAVE,            /* before leaving a window */
  362.     NUM_EVENTS                /* MUST be the last one */
  363. };
  364.  
  365. /*
  366.  * Boolean constants
  367.  */
  368. #ifndef TRUE
  369. # define FALSE    0            /* note: this is an int, not a long! */
  370. # define TRUE    1
  371. #endif
  372.  
  373. #define MAYBE    2            /* for beginline() and the 'sol' option */
  374.  
  375. /* May be returned by add_new_completion(): */
  376. #define RET_ERROR                (-1)
  377.  
  378. /*
  379.  * jump_to_mouse() returns one of these values, possibly with
  380.  * CURSOR_MOVED added
  381.  */
  382. #define IN_UNKNOWN        1
  383. #define IN_BUFFER        2
  384. #define IN_STATUS_LINE    3            /* Or in command line */
  385. #define CURSOR_MOVED    0x100
  386.  
  387. /* flags for jump_to_mouse() */
  388. #define MOUSE_FOCUS        0x1        /* if used, need to stay in this window */
  389. #define MOUSE_MAY_VIS    0x2        /* if used, may set visual mode */ 
  390. #define MOUSE_DID_MOVE    0x4        /* if used, only act when mouse has moved */
  391. #define MOUSE_SETPOS    0x8        /* if used, only set current mouse position */
  392.  
  393. /*
  394.  * Minimum screen size
  395.  */
  396. #define MIN_COLUMNS        12        /* minimal columns for screen */
  397. #define MIN_ROWS        1        /* minimal rows for one window */
  398. #define STATUS_HEIGHT    1        /* height of a status line under a window */
  399.  
  400. /*
  401.  * Buffer sizes
  402.  */
  403. #ifndef CMDBUFFSIZE
  404. # define CMDBUFFSIZE    256        /* size of the command processing buffer */
  405. #endif
  406.  
  407. #define LSIZE        512            /* max. size of a line in the tags file */
  408.  
  409. #define IOSIZE       (1024+1)     /* file i/o and sprintf buffer size */
  410. #define MSG_BUF_LEN    80            /* length of buffer for small messages */
  411.  
  412. #define    TERMBUFSIZE    1024
  413.  
  414. #if defined(AMIGA) || defined(__linux__)
  415. # define TBUFSZ 2048            /* buffer size for termcap entry */
  416. #else
  417. # define TBUFSZ 1024            /* buffer size for termcap entry */
  418. #endif
  419.  
  420. /*
  421.  * Maximum length of key sequence to be mapped.
  422.  * Must be able to hold an Amiga resize report.
  423.  */
  424. #define MAXMAPLEN    50
  425.  
  426. #ifdef BINARY_FILE_IO
  427. # define WRITEBIN    "wb"        /* no CR-LF translation */
  428. # define READBIN    "rb"
  429. # define APPENDBIN    "ab"
  430. #else
  431. # define WRITEBIN    "w"
  432. # define READBIN    "r"
  433. # define APPENDBIN    "a"
  434. #endif
  435.  
  436. /*
  437.  * EMX doesn't have a global way of making open() use binary I/O.
  438.  * Use O_BINARY for all open() calls.
  439.  */
  440. #ifdef __EMX__
  441. # define O_EXTRA    O_BINARY
  442. #else
  443. # define O_EXTRA    0
  444. #endif
  445.  
  446. #define CHANGED           set_Changed()
  447. #define UNCHANGED(buf)    unset_Changed(buf)
  448.  
  449. /*
  450.  * defines to avoid typecasts from (char_u *) to (char *) and back
  451.  * (vim_strchr() and vim_strrchr() are now in alloc.c)
  452.  */
  453. #define STRLEN(s)            strlen((char *)(s))
  454. #define STRCPY(d, s)        strcpy((char *)(d), (char *)(s))
  455. #define STRNCPY(d, s, n)    strncpy((char *)(d), (char *)(s), (size_t)(n))
  456. #define STRCMP(d, s)        strcmp((char *)(d), (char *)(s))
  457. #define STRNCMP(d, s, n)    strncmp((char *)(d), (char *)(s), (size_t)(n))
  458. #define STRCAT(d, s)        strcat((char *)(d), (char *)(s))
  459. #define STRNCAT(d, s, n)    strncat((char *)(d), (char *)(s), (size_t)(n))
  460.  
  461. #define MSG(s)                msg((char_u *)(s))
  462. #define EMSG(s)                emsg((char_u *)(s))
  463. #define EMSG2(s, p)            emsg2((char_u *)(s), (char_u *)(p))
  464. #define EMSGN(s, n)            emsgn((char_u *)(s), (long)(n))
  465. #define OUTSTR(s)            outstr((char_u *)(s))
  466. #define OUTSTRN(s)            outstrn((char_u *)(s))
  467. #define MSG_OUTSTR(s)        msg_outstr((char_u *)(s))
  468.  
  469. typedef long        linenr_t;        /* line number type */
  470. typedef unsigned    colnr_t;        /* column number type */
  471.  
  472. #define MAXLNUM (0x7fffffff)        /* maximum (invalid) line number */
  473.  
  474. #if SIZEOF_INT >= 4
  475. # define MAXCOL    (0x7fffffff)        /* maximum column number, 31 bits */
  476. #else
  477. # define MAXCOL    (0x7fff)            /* maximum column number, 15 bits */
  478. #endif
  479.  
  480. #define SHOWCMD_COLS 10                /* columns needed by shown command */
  481.  
  482. /*
  483.  * Include a prototype for vim_memmove(), it may not be in alloc.pro.
  484.  */
  485. #ifdef VIM_MEMMOVE
  486. void vim_memmove __ARGS((void *, void *, size_t));
  487. #else
  488. # ifndef vim_memmove
  489. #  define vim_memmove(to, from, len) memmove(to, from, len)
  490. # endif
  491. #endif
  492.  
  493. /*
  494.  * For the Amiga we use a version of getenv that does local variables under 2.0
  495.  * For Win32 and MSDOS we also check $HOME when $VIM is used.
  496.  */
  497. #if !defined(AMIGA) && !defined(WIN32) && !defined(MSDOS) && !defined(VMS)
  498. # define vim_getenv(x) (char_u *)getenv((char *)x)
  499. #endif
  500.  
  501. /*
  502.  * fnamecmp() is used to compare filenames.
  503.  * On some systems case in a filename does not matter, on others it does.
  504.  * (this does not account for maximum name lengths and things like "../dir",
  505.  * thus it is not 100% accurate!)
  506.  */
  507. #ifdef CASE_INSENSITIVE_FILENAME
  508. # define fnamecmp(x, y) stricmp((char *)(x), (char *)(y))
  509. # define fnamencmp(x, y, n) strnicmp((char *)(x), (char *)(y), (size_t)(n))
  510. #else
  511. # define fnamecmp(x, y) strcmp((char *)(x), (char *)(y))
  512. # define fnamencmp(x, y, n) strncmp((char *)(x), (char *)(y), (size_t)(n))
  513. #endif
  514.  
  515. #ifdef HAVE_MEMSET
  516. # define vim_memset(ptr, c, size)    memset((ptr), (c), (size))
  517. #else
  518. void *vim_memset __ARGS((void *, int, size_t));
  519. #endif
  520.  
  521. /* for MS-DOS and Win32: use chdir() that also changes the default drive */
  522. #ifdef USE_VIM_CHDIR
  523. int vim_chdir __ARGS((char *));
  524. #else
  525. # define vim_chdir chdir
  526. #endif
  527.  
  528. /*
  529.  * vim_iswhite() is used for "^" and the like. It differs from isspace()
  530.  * because it doesn't include <CR> and <LF> and the like.
  531.  */
  532. #define vim_iswhite(x)    ((x) == ' ' || (x) == '\t')
  533.  
  534. /* Note that gui.h is included by structs.h */
  535.  
  536. #include "structs.h"        /* file that defines many structures */
  537.